# 装饰器 -> 在不改变原函数的情况下,給原代码添加新的功能
"""
条件:
1. 不修改源程序
2. 不改变函数的调用执行方法
"""

def send_msg():
    print("发送消息")

def send_2():
    print("发送红包")
## 1.1 标准版装饰器
def outer(fn):
    def inner():
        print("登录")
        fn()
    return inner

# outer(send_msg)()
# outer(send_2)()
# 登录
# 发送消息
# 登录
# 发送红包



# # 更加简便的语法糖
# @outer
# def send_3():
#     print("发送表情包")
# send_3()
# # 登录
# # 发送表情包
#



# 有参数的被装饰函数
def outer1(fn):
    def inner(name):
        print(f"{name} 是 inner中的参数")
        fn(name)
    return inner


@outer1
def test(name):
    print("这是被装饰的函数")

test('qqq')

# 登录
# 发送表情包
# qqq 是 inner中的参数
# 这是被装饰的函数